layui.use(['table','form','jquery'], function(){
    var table = layui.table;
    var layer = layui.layer;
    var form = layui.form;
    var $ = layui.jquery;


    // 初始化树形结构
    initTree();

    // 绑定添加主分类的代码
    $('#addMainType').click(function(){
        // 弹出添加主分类的弹出层

        layer.open({
            type : 1,
            content :$('#mainAddLayer'),
            title : '添加主分类',
            btn : ['确定'],
            offset: '300px',
            success: function(layero){
                layer.setTop(layero); //重点2
            },
            yes : function(index){
                $.ajax({
                    url: ctx+"/eng/waste/type/tree/addMainType",
                    data : $('#mainAddForm').serialize(),
                    type : 'post',
                    async : false,
                    success : function(res){
                        if(res.success){
                            layer.closeAll()
                            layer.msg(res.msg,{icon:1});
                            // 需要重新渲染树.
                            initTree();
                        }else{
                            layer.msg(res.msg,{icon:2});
                        }
                    }
                });
            }
        })

    });

    //
    var ZtreeNode = null;
    function addHoverDom(treeId, treeNode) {
        $('.curSelectedNode').removeClass('curSelectedNode')
        // 获取节点的内容
        var sObj = $("#" + treeNode.tId + "_span");
        var showPrice = '';
        // 展示浮动价格
        if(!treeNode.children){
            showPrice += "<span class='layui-icon layui-icon-search showPrice' " + treeNode.tId + "' title='展示浮动价格' info='"+JSON.stringify(treeNode)+"'></span>";
        }
        // 添加修改名称
        showPrice +="<span class='layui-icon layui-icon-edit editTypeName'  title='修改名称' info='"+JSON.stringify(treeNode)+"'></span>";

        // 添加子节点
        if(treeNode.level < 2) {
            showPrice += "<span class='layui-icon layui-icon-download-circle addSon'  title='添加子类型' info='" + JSON.stringify(treeNode) + "'></span>";
        }
        // 删除功能
        showPrice +="<span class='layui-icon layui-icon-delete delNode'  title='删除' info='"+JSON.stringify(treeNode)+"'></span>";
        // 如果是第一层 ,添加一个修改计量单位的位置
        if(treeNode.level == 0){
            showPrice +="<span class='layui-icon layui-icon-fonts-clear tree_unit_edit'  title='修改计量单位' info='"+JSON.stringify(treeNode)+"'></span>";
        }

        // 判断一下
        if(sObj.next().length == 0){
            sObj.after(showPrice);
        }
    };
    function removeHoverDom(treeId, treeNode) {
        // 删除掉后面的span
        var sObj = $("#" + treeNode.tId + "_span");
        sObj.next().remove();
        sObj.next().remove();
        sObj.next().remove();
        sObj.next().remove();
        sObj.next().remove();
    };

    // 删除节点
    $('#tree').on('click','.delNode',function(e){

        ZtreeNode = JSON.parse($(e.target).attr('info')) ;
        top.layer.confirm('是否删除?如果该类型已经开始收购,请不要删除,防止业务数据的丢失!', function(index){
            $.ajax({
                url : ctx+"/eng/waste/type/tree/delTreeNode",
                data:{
                    id : ZtreeNode.id,
                },
                async : false,
                type : 'post',
                success : function(res){
                    if(res.success){
                        layer.msg(res.msg,{icon:1});
                        top.layer.close(index);
                        initTree();
                    }else{
                        layer.msg(res.msg,{icon:2}); layer.msg(res.msg,{icon:1});
                    }
                }
            });
        });
    });

    // 绑定计量单位修改的按钮
    $('#tree').on('click','.tree_unit_edit',function(e){

        ZtreeNode = JSON.parse($(e.target).attr('info')) ;

        // 回填数据
        form.val('editUnitForm',{
            id : ZtreeNode.id,
            unit : ZtreeNode.unit,
            detailUnit : ZtreeNode.detailUnit
        });
        //  回填数据 ....
        // 修改计量单位
        layer.open({
            title : '修改计量单位',
            type : 1,
            content : $('#editUnitLayer'),
            btn : ['确定'],
            offset: '150px',
            zIndex : 29891014,
            success: function(layero){
                layer.setTop(layero); //重点2
            },
            yes : function(index){
                $.ajax({
                    url : ctx+"/eng/waste/type/tree/editUnit",
                    data: $('#editUnitForm').serialize(),
                    async : false,
                    type : 'post',
                    success : function(res){
                        if(res.success){
                            layer.msg(res.msg,{icon:1});
                            layer.closeAll()
                            initTree();
                        }else{
                            layer.msg(res.msg,{icon:2});
                        }
                    }
                });
            }
        });
    });

    // 添加按钮自删除的方法
    $('#priceContent').on('click','.delButton',function(e){
        $(e.target).remove();
    })

    // 绑定价格添加的按钮
    $('#addTypePriceButton').click(function(){
        // 输入价格
        layer.prompt({
            offset: '90px',
            title : '请输入价格',
        },function(value, index, elem){
            // 将数值放在div之中...
            $('#priceContent').append('<button price="'+value+'" type="button" class="layui-btn layui-btn-primary delButton">'+value+'元</button>');
            layer.close(index);
        });
    });

    var editPriceId = null;

    // 绑定查看价格详情的按钮
    $('#tree').on('click','.showPrice',function(e){
        ZtreeNode = JSON.parse($(e.target).attr('info')) ;
        var id = ZtreeNode.id;
        editPriceId = id;
        // 根据这个id查询浮动价格
        // 在这里我们需要做一个回显的功能
        $.ajax({
            url : ctx+"/eng/waste/type/tree/getAllPrice",
            type : 'post',
            data :{
                id : id
            },
            async : false,
            success : function(res){
                $('#priceContent').html('');
                // 循环填充就好了
                $.each(res.data,function(index,value){
                    $('#priceContent').append('<button price="'+value.price+'" type="button" class="layui-btn layui-btn-primary delButton">'+value.price+'元</button>');
                })
            }
        });


        layer.open({
            type : 1,
            title : '浮动价格维护',
            content : $('#viewTreeNodePrice'),
            area :['650px','250px'],
            offset: '350px',
            success: function(layero){
                layer.setTop(layero);
            },
            btn :['确定'],
            yes : function(index){
                // 提交数据内容
                // 首先就是手机数据内容
                var data = [];
                $.each($('#priceContent').find('button'),function(index,value){
                    data.push({
                        typeId : editPriceId,
                        price : $(value).attr('price')
                    });
                });

                console.log(data);

                // 提交数据
                $.ajax({
                    url : ctx+"/eng/waste/type/tree/editTypePrice?typeId="+editPriceId,
                    type : 'post',
                    data : JSON.stringify(data),
                    async : false,
                    contentType :'application/json;charset=utf-8',
                    success : function(res){
                        if(res.success){
                            layer.close(index);
                            layer.msg(res.msg,{icon:1});
                        }else{
                            layer.msg(res.msg,{icon:2});
                        }
                    }
                });

            }
        });
    });


    // 添加浮动价格
    table.on('toolbar(table)', function(obj){
        data = obj.data;
        var layEvent = obj.event;
        if(layEvent === 'addPrice'){
            addPrice(data);
        }
    });


    table.on('tool(table)', function(obj){
        data = obj.data;
        var layEvent = obj.event;
        if(layEvent === 'delPrice'){
            delPrice(data);
        }else if(layEvent === 'editPrice'){
            editPrice(data);
        }
    });


    function editPrice(data){
        // 重载数据
        form.val('editTreeNodePriceForm',{
            id : data.id,
            minPrice : data.minPrice,
            maxPrice : data.maxPrice,
            remark : data.remark
        });
        // 弹出层
        layer.open({
            type : 1,
            title : '修改浮动价格',
            content : $('#editTreeNodePrice'),
            btn : ['提交'],
            yes : function(index){
                $.ajax({
                    url : ctx+"/eng/waste/type/tree/editTreeNodePrice",
                    data :$('#editTreeNodePriceForm').serialize(),
                    async : false,
                    type : 'post',
                    success : function(res){
                        if(res.success){
                            layer.msg(res.msg,{icon:1});
                            table.reload('table');
                            layer.close(index);
                        }else{
                            layer.msg(res.msg,{icon:2});
                        }
                    }
                });
            }
        });
    }

    // 删除浮动价格
    function delPrice(data){
        layer.confirm('是否删除浮动价格?', {icon: 3, title:'提示'}, function(index){
            $.ajax({
                url : ctx+"/eng/waste/type/tree/delTreeNodePrice",
                data :{
                    id : data.id
                },
                async : false,
                type : 'post',
                success : function(res){
                    if(res.success){
                        layer.msg(res.msg,{icon:1});
                        table.reload('table');
                        layer.close(index);
                    }else{
                        layer.msg(res.msg,{icon:2});
                    }
                }
            });
        });

    }

    // 添加浮动价格
    function addPrice(data){
        layer.open({
            title : '添加浮动价格',
            type : 1,
            content : $('#addTreeNodePrice'),
            btn : ['确定'],
            offset: '100px',
            success: function(layero){
                layer.setTop(layero); //重点2
            },
            yes : function(index){
                $.ajax({
                    url : ctx+"/eng/waste/type/tree/addTreeNodePrice",
                    data :{
                        typeId : ZtreeNode.id,
                        remark : $("#addTreeNodePriceForm input[name='remark']").val(),
                        minPrice : $("#addTreeNodePriceForm input[name='minPrice']").val(),
                        maxPrice : $("#addTreeNodePriceForm input[name='maxPrice']").val(),
                    },
                    async : false,
                    type : 'post',
                    success : function(res){
                        if(res.success){
                            layer.msg(res.msg,{
                                icon:1,
                                offset:'150px'
                            });
                            layer.close(index)
                            table.reload('table');
                            $('#addTreeNodePriceForm_reset').click();
                        }else{
                            layer.msg(res.msg,{icon:2, offset:'150px'});
                        }
                    }
                });
            }
        })
    }


    // 刷新树形结构的内容
    function initTree(){
        var setting = {
            data: {
                simpleData: {
                    enable: true,
                    idKey: "id",
                    pIdKey: "pid",
                    rootPId: 0
                }
            },
            view: {
                showIcon: false,
                addHoverDom: addHoverDom,
                removeHoverDom: removeHoverDom,
            },
            callback : {
                beforeClick : validStatus,//这里
                beforeDrag: beforeDrag, // 允许拖拽
                beforeDrop: beforeDrop  // 拖拽结束
            },
            edit: {
                enable: true,
                showRemoveBtn: false,
                showRenameBtn: false
            }
        };

        // 禁止点击节点
        function validStatus(){
            return false;
        }

        var  zNodes = null;

        // 获取数据
        $.ajax({
            url : ctx+"/eng/waste/type/tree/queryAllNode",
            async : false,
            success : function(res){
                zNodes = res.data;
            }
        });
        $.fn.zTree.init($("#tree"), setting, zNodes);
        var treeObj = $.fn.zTree.getZTreeObj("tree");
        treeObj.setting.edit.drag.isCopy = false;
        treeObj.setting.edit.drag.isMove = true;
        treeObj.setting.edit.drag.prev = true;
        treeObj.setting.edit.drag.inner = false;
        treeObj.setting.edit.drag.next = true;
        treeObj.expandAll(true);
    }


    // 拖拽的函数
    function beforeDrag(treeId, treeNodes) {
        console.log('before',treeId,treeNodes);
        if(treeNodes[0].children){
            return false;
        }
        for (var i=0,l=treeNodes.length; i<l; i++) {
            if (treeNodes[i].drag === false) {
                return false;
            }
        }
        return true;
    }

    function beforeDrop(treeId, treeNodes, targetNode, moveType) {
        console.log('before',treeId,treeNodes,targetNode,moveType);
        // 我们实现拖拽的限制就是pid是一致的,而且必须没有子节点的.
        if(treeNodes[0].pid != targetNode.pid ){
            return false;
        }
        // 下面就是核心的逻辑
        //
        var id = targetNode.id;
        var sourceId = treeNodes[0].id;
        $.ajax({
            url : ctx + "/eng/waste/type/tree/swap",
            data : {
                id : id,
                sourceId :sourceId
            },
            async : false,
            function(res){
                if(!res.success){
                    layer.msg(res.msg,{icon:2})
                    return false;
                }
            }
        });
        return targetNode ? targetNode.drop !== false : true;
    }


    // 修改类别的名称
    $('#tree').on('click','.editTypeName',function(e){
        ZtreeNode = JSON.parse($(e.target).attr('info')) ;
        var id = ZtreeNode.id;

        // 弹出层
        top.layer.prompt({
            title: '请输入名称',
        },function(value, index, elem){
            // 提交数据内容
            $.ajax({
                url: ctx+"/eng/waste/type/tree/editTypeName",
                data : {
                    name : value,
                    id : id
                },
                type : 'post',
                async : false,
                success : function(res){
                    if(res.success){
                        top.layer.closeAll()
                        layer.msg(res.msg,{icon:1});
                        // 需要重新渲染树.
                        initTree();
                    }else{
                        layer.msg(res.msg,{icon:2});
                    }
                }
            });
        });

    });


    // 添加子节点
    $('#tree').on('click','.addSon',function(e){
        ZtreeNode = JSON.parse($(e.target).attr('info')) ;
        var id = ZtreeNode.id;

        // 弹出层
        top.layer.prompt({
            title: '请输入名称',
        },function(value, index, elem){
            // 提交数据内容
            $.ajax({
                url: ctx+"/eng/waste/type/tree/addSon",
                data : {
                    name : value,
                    pid : id
                },
                type : 'post',
                async : false,
                success : function(res){
                    if(res.success){
                        top.layer.closeAll()
                        layer.msg(res.msg,{icon:1});
                        // 需要重新渲染树.
                        initTree();
                    }else{
                        layer.msg(res.msg,{icon:2});
                    }
                }
            });
        });

    });

});